package juego;

import java.util.ArrayList;
import java.util.Iterator;

public abstract class Colateral extends Automata {
	
	//atributos de clase
	private static int miImpacto = 10;
	
	//metodos
	
	//constructor
	public Colateral(int x, int y) {
		super(x,y);
	};
	
	//Devuelve el impacto provocado
    @Override
	public Impacto impactoProvocado(){
    	return new ImpactoLineal(miImpacto);
	};    
		
	
	@Override
	public int vivir(ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines) {
		int puntaje = 0;
		//movimiento
		this.movimientoPropio();
		//impacto
		puntaje = (this.impactar(listaDeMoviles,listaDeBotines));
		return puntaje;
	};
	
		
	//Metodo privado. Se encarga de la destruccion si corresponde.
	//Retorna los puntos que deben computarse.
	@Override
	protected int impactar (ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		int puntaje = 0;
		boolean destruido = false;
		Iterator<Movil> iterador = listaDeMoviles.iterator();
		boolean contacto;
				
		while (iterador.hasNext()){
			
			Movil movil = iterador.next();
			try {
				contacto = movil.huboContacto(this);
				
				//solo puede ser impactado por el mismo Algo42 o por
				//proyectiles disparados por este
				if (contacto & movil.verLealtad()){
					puntaje += movil.recibirImpacto(this.impactoProvocado(), listaDeMoviles, listaDeBotines);
					
					//si no esta vivo lo elimina de la lista
					if (!movil.estaVivo()){
						iterador.remove();
					};
					destruido = true;
				}
			}
			catch (Exception e){}
		}
		
		if (destruido){
			this.destruirse(listaDeMoviles);
			puntaje = this.puntajePorDestruccion();
		};
		
		return puntaje;
	};
	
	
	
	
	//siempre que recibe un impacto es destruido. 
	@Override
	public int recibirImpacto(Impacto impacto, ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		this.vivo = false;
		return this.puntajePorDestruccion();
	};
	
	@Override
	public boolean esNaveEnemiga(){
		return false;
	};
	
	@Override
	public boolean esProyectil(){
		return false;
	}
	
	protected abstract int puntajePorDestruccion();
	
}
